package net.csdn.business.common.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import net.csdn.business.common.constant.CommonConstants;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * @author wanghang
 * @version 1.0
 * @date 2022/9/28 11:38
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ClaVo implements Serializable {

    /**
     * CLA协议ID
     */
    private String objectId;

    /**
     * CLA协议名称
     */
    private String claName;

    /**
     * CLA协议生效状态 (1-启用 0-停用 -1已删除)
     */
    private Integer status;

    /**
     * 所属组织ID
     */
    private String orgId;

    /**
     * 所属组织命名空间
     */
    private String orgPath;

    /**
     * 组织头像
     */
    private String orgLogo;

    /**
     * CLA协议版本号
     */
    private String version;

    /**
     * 是否需要重新签署 (1-是 0-否)
     */
    private Integer needResign;

    /**
     * 协议内容
     */
    private String claContent;

    /**
     * 协议内容MD
     */
    private String claContentMd;

    /**
     * 仓库列表（详情列表才返回）
     */
    private List<Repo> repos;

    /**
     * 组织是否签署
     */
    private Boolean isOrgSign=false;

    /**
     * 签署用户数量
     */
    private Integer signNum;

    protected String createdBy;
    protected String lastModifiedBy;
    @JsonFormat(pattern = CommonConstants.DEFAULT_PATTERN, timezone = CommonConstants.DEFAULT_TIMEZONE)
    protected Date createdDate;
    @JsonFormat(pattern = CommonConstants.DEFAULT_PATTERN, timezone = CommonConstants.DEFAULT_TIMEZONE)
    protected Date lastModifiedDate;

    @Data
    public static class Repo {
        /**
         * 代码库ID
         */
        @JsonSerialize(using = ToStringSerializer.class)
        private Long id;
        /**
         * 代码库名称
         */
        private String name;
        /**
         * 代码库路径
         */
        private String path;
        /**
         * 代码库描述
         */
        private String description;
        /**
         * 代码库完整路径（含完整组路径）
         */
        private String pathWithNamespace;
        /**
         * 代码库完整名称（含完整组名称）
         */
        private String nameWithNamespace;
        /**
         * 可见性 0-私有 20-公开
         */
        private Integer visibilityLevel;
        /**
         * 页面访问时的URL
         */
        private String webUrl;
    }


}